🎖️GitЯра🎖️
src/helpers/bridges/BridgeBase.h 93b2db63de9009af047a2d0e1bcd97b4b0ba7106 (93b2db63) Text, 3.98 KB
Tff7b72#Tff7b72pragma once
Tff7b72#Tff7b72include T8b949e"helpers/AbstractBridge.h"
Tff7b72#Tff7b72include T8b949e"helpers/CommonCLI.h"
Tff7b72#Tff7b72include T8b949e"helpers/SimpleMeshTables.h"
Tff7b72#Tff7b72include T8b949e<RTClib.h>
T8b949e/**
* @brief Base class implementing common bridge functionality
*
* This class provides common functionality used by different bridge implementations
* like packet tracking, checksum calculation, timestamping, and duplicate detection.
*
* Features:
* - Fletcher-16 checksum calculation for data integrity
* - Packet duplicate detection using SimpleMeshTables
* - Common timestamp formatting for debug logging
* - Shared packet management and queuing logic
*/
Te6edf3class Te6edf3BridgeBase Tff7b72: Te6edf3public Te6edf3AbstractBridge Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3virtual Tff7b72~Te6edf3BridgeBaseTb4b4b4(Tb4b4b4) Tff7b72= Tff7b72defaultTb4b4b4;
T8b949e/**
* @brief Gets the current state of the bridge.
*
* @return true if the bridge is initialized and running, false otherwise.
*/
Tffa657bool Td2a8ffisRunningTb4b4b4(Tb4b4b4) Tff7b72const Te6edf3overrideTb4b4b4;
T8b949e/**
* @brief Common magic number used by all bridge implementations for packet identification
*
* This magic number is placed at the beginning of bridge packets to identify
* them as mesh bridge packets and provide frame synchronization.
*/
Tff7b72static Tff7b72constexpr Tffa657uint16_t Te6edf3BRIDGE_PACKET_MAGIC Tff7b72= T79c0ff0xC03ETb4b4b4;
T8b949e/**
* @brief Common field sizes used by bridge implementations
*
* These constants define the size of common packet fields used across bridges.
* BRIDGE_MAGIC_SIZE is used by all bridges for packet identification.
* BRIDGE_LENGTH_SIZE is used by bridges that need explicit length fields (like RS232).
* BRIDGE_CHECKSUM_SIZE is used by all bridges for Fletcher-16 checksums.
*/
Tff7b72static Tff7b72constexpr Tffa657uint16_t Te6edf3BRIDGE_MAGIC_SIZE Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3BRIDGE_PACKET_MAGICTb4b4b4)Tb4b4b4;
Tff7b72static Tff7b72constexpr Tffa657uint16_t Te6edf3BRIDGE_LENGTH_SIZE Tff7b72= Tff7b72sizeofTb4b4b4(Tffa657uint16_tTb4b4b4)Tb4b4b4;
Tff7b72static Tff7b72constexpr Tffa657uint16_t Te6edf3BRIDGE_CHECKSUM_SIZE Tff7b72= Tff7b72sizeofTb4b4b4(Tffa657uint16_tTb4b4b4)Tb4b4b4;
Te6edf3protectedTff7b72:
T8b949e/** Tracks bridge state */
Tffa657bool Te6edf3_initialized Tff7b72= Tffa657falseTb4b4b4;
T8b949e/** Packet manager for allocating and queuing mesh packets */
Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketManager Tff7b72*Te6edf3_mgrTb4b4b4;
T8b949e/** RTC clock for timestamping debug messages */
Te6edf3meshTff7b72:Tff7b72:Te6edf3RTCClock Tff7b72*Te6edf3_rtcTb4b4b4;
T8b949e/** Node preferences for configuration settings */
Te6edf3NodePrefs Tff7b72*Te6edf3_prefsTb4b4b4;
T8b949e/** Tracks seen packets to prevent loops in broadcast communications */
Te6edf3SimpleMeshTables Te6edf3_seen_packetsTb4b4b4;
T8b949e/**
* @brief Constructs a BridgeBase instance
*
* @param prefs Node preferences for configuration settings
* @param mgr PacketManager for allocating and queuing packets
* @param rtc RTCClock for timestamping debug messages
*/
Te6edf3BridgeBaseTb4b4b4(Te6edf3NodePrefs Tff7b72*Te6edf3prefsTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3PacketManager Tff7b72*Te6edf3mgrTb4b4b4, Te6edf3meshTff7b72:Tff7b72:Te6edf3RTCClock Tff7b72*Te6edf3rtcTb4b4b4)
Tff7b72: Te6edf3_prefsTb4b4b4(Te6edf3prefsTb4b4b4)Tb4b4b4, Te6edf3_mgrTb4b4b4(Te6edf3mgrTb4b4b4)Tb4b4b4, Te6edf3_rtcTb4b4b4(Te6edf3rtcTb4b4b4) Tb4b4b4{Tb4b4b4}
T8b949e/**
* @brief Gets formatted date/time string for logging
*
* Format: "HH:MM:SS - DD/MM/YYYY U"
*
* @return Formatted date/time string
*/
Tff7b72const Tffa657char Tff7b72*Te6edf3getLogDateTimeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e/**
* @brief Calculate Fletcher-16 checksum
*
* Based on: https://en.wikipedia.org/wiki/Fletcher%27s_checksum
* Used to verify data integrity of received packets
*
* @param data Pointer to data to calculate checksum for
* @param len Length of data in bytes
* @return Calculated Fletcher-16 checksum
*/
Tff7b72static Tffa657uint16_t Td2a8fffletcher16Tb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4)Tb4b4b4;
T8b949e/**
* @brief Validate received checksum against calculated checksum
*
* @param data Pointer to data to validate
* @param len Length of data in bytes
* @param received_checksum Checksum received with data
* @return true if checksum is valid, false otherwise
*/
Tffa657bool Td2a8ffvalidateChecksumTb4b4b4(Tff7b72const Tffa657uint8_t Tff7b72*Te6edf3dataTb4b4b4, Tffa657size_t Te6edf3lenTb4b4b4, Tffa657uint16_t Te6edf3received_checksumTb4b4b4)Tb4b4b4;
T8b949e/**
* @brief Common packet handling for received packets
*
* Implements the standard pattern used by all bridges:
* - Check if packet was seen before using _seen_packets.wasSeen()
* - Queue packet for mesh processing if not seen before
* - Free packet if already seen to prevent duplicates
*
* @param packet The received mesh packet
*/
Tffa657void Td2a8ffhandleReceivedPacketTb4b4b4(Te6edf3meshTff7b72:Tff7b72:Te6edf3Packet Tff7b72*Te6edf3packetTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Served by rngit 1.5.4 - Generated in 0.03s